/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sysdrive.DAO;

import br.com.sysdrive.model.ContaReceber;
import br.com.sysdrive.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Willian Frias
 */
public class ContaReceberDAOImpl implements GenericDAO {

    private Connection conn;
    private ResultSet rs;

    public ContaReceberDAOImpl() throws Exception {
        try {
            this.conn = ConnectionFactory.getConnection();
            System.out.println("Conectado com Sucesso!");
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }

    @Override
    public Boolean cadastrar(Object object) {
        PreparedStatement stmt = null;
        ContaReceber contaReceber = (ContaReceber) object;
        String sql = "insert into conta_receber (data_vencimento_conta_receber, valor_parcela_conta_receber, "
                + "desconto_conta_receber, juros_conta_receber, valor_total_conta_receber, qtd_parcela_conta_receber,"
                + "numero_parcela_conta_receber, status_conta_receber, id_venda) values (?,?,?,?,?,?,?,?,?);";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setDate(1, new java.sql.Date(contaReceber.getDataVencimentoContaReceber().getTime()));
            stmt.setDouble(2, contaReceber.getValorParcelaContaReceber());
            stmt.setInt(3, contaReceber.getDescontoContaReceber());
            stmt.setInt(4, contaReceber.getJurosContaReceber());
            stmt.setDouble(5, contaReceber.getValorTotalContaReceber());
            stmt.setInt(6, contaReceber.getQuantidadeParcelaContaReceber());
            stmt.setInt(7, contaReceber.getNumeroParcelaContaReceber());
            stmt.setString(8, contaReceber.getStatusContaReceber().toUpperCase());
            stmt.setInt(9, contaReceber.getVenda().getIdVenda());
            stmt.execute();
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao cadastrar ContaReceber! Erro: " + ex.getMessage());
            ex.printStackTrace();
            return false;
        } catch (Exception ex) {
            System.out.println("Problemas ao cadastrar ContaReceber! Erro ContaReceberDAO: " + ex.getMessage());
            ex.printStackTrace();
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Erro ContaReceberDAO: " + ex.getMessage());
            }
        }
    }

    @Override
    public List<Object> listar() {
        List<Object> resultado = new ArrayList<Object>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String sql = "select c.* "
                + "from conta_receber c;";
        try {
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();
            while (rs.next()) {
                ContaReceber contaReceber = new ContaReceber();
                contaReceber.setIdContaReceber(rs.getInt("id_conta_receber"));
                contaReceber.setDataVencimentoContaReceber(rs.getDate("data_vencimento_conta_receber"));
                contaReceber.setValorParcelaContaReceber(rs.getDouble("valor_parcela_conta_receber"));
                contaReceber.setDescontoContaReceber(rs.getInt("desconto_conta_receber"));
                contaReceber.setJurosContaReceber(rs.getInt("juros_conta_receber"));
                contaReceber.setValorTotalContaReceber(rs.getDouble("valor_total_conta_receber"));
                contaReceber.setQuantidadeParcelaContaReceber(rs.getInt("qtd_parcela_conta_receber"));
                contaReceber.setNumeroParcelaContaReceber(rs.getInt("numero_parcela_conta_receber"));
                contaReceber.setStatusContaReceber(rs.getString("status_conta_receber"));
                resultado.add(contaReceber);
            }
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao listar ContaReceber! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Erro ContaReceberDAO: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
        return resultado;
    }

    @Override
    public Object carregar(int idObject) {
        PreparedStatement stmt = null;
        ContaReceber contaReceber = null;
        ResultSet rs = null;
        String sql = "select c.* from conta_receber c where id_conta_receber = ?";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, idObject);
            rs = stmt.executeQuery();
            while (rs.next()) {
                contaReceber = new ContaReceber();
                contaReceber.setDataVencimentoContaReceber(rs.getDate("data_vencimento_conta_receber"));
                contaReceber.setValorParcelaContaReceber(rs.getDouble("valor_parcela_conta_receber"));
                contaReceber.setDescontoContaReceber(rs.getInt("desconto_conta_receber"));
                contaReceber.setJurosContaReceber(rs.getInt("juros_conta_receber"));
                contaReceber.setQuantidadeParcelaContaReceber(rs.getInt("qtd_parcela_conta_receber"));
                contaReceber.setNumeroParcelaContaReceber(rs.getInt("numero_parcela_conta_receber"));
                contaReceber.setValorTotalContaReceber(rs.getDouble("valor_total_conta_receber"));
                contaReceber.setStatusContaReceber(rs.getString("status_conta_receber"));
                contaReceber.setIdContaReceber(rs.getInt("id_conta_receber"));

            }
            return contaReceber;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao Carregar ContaReceber! Erro ContaReceberDAO: " + ex.getMessage());
            ex.printStackTrace();
            return null;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão Carregar ContaReceber! Erro ContaReceberDAO: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
    }

    @Override
    public Boolean alterar(Object object) {
        PreparedStatement stmt = null;
        ContaReceber contaReceber = (ContaReceber) object;
        String sql = "update conta_receber set data_vencimento_conta_receber = ?, valor_parcela_conta_receber = ?, "
                + "desconto_conta_receber = ?, juros_conta_receber = ?, valor_total_conta_receber = ?,"
                + "qtd_parcela_conta_receber = ?, numero_parcela_conta_receber = ?, status_conta_receber = ?"
                + "where id_conta_receber = ?";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setDate(1, new java.sql.Date(contaReceber.getDataVencimentoContaReceber().getTime()));
            stmt.setDouble(2, contaReceber.getValorParcelaContaReceber());
            stmt.setInt(3, contaReceber.getDescontoContaReceber());
            stmt.setInt(4, contaReceber.getJurosContaReceber());
            stmt.setDouble(5, contaReceber.getValorTotalContaReceber());
            stmt.setInt(6, contaReceber.getQuantidadeParcelaContaReceber());
            stmt.setInt(7, contaReceber.getNumeroParcelaContaReceber());
            stmt.setString(8, contaReceber.getStatusContaReceber().toUpperCase());
            stmt.setInt(9, contaReceber.getIdContaReceber());
            stmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao alterar ContaReceber! Erro ContaReceberDAO: " + ex.getMessage());
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parâmetros de conexão Alterar ContaReceber! Erro ContaReceberDAO: " + ex.getMessage());
            }
        }
    }
}
